/**
 * 判断对象是否是数组
 * @param obj
 */
export function isArray(obj: any) {
    return Array.isArray(obj);
}

/**
 *  数组去重
 * @param array 需要去重的数组
 * @param key 需要作为去重关键字的key (对象去重需要)
 * @returns
 */
export function arrayRemoveRepeat(array: any[], key?: string) {
    if (!isArray(array)) return false;
    if (key) {
        const hash = {};
        return array.reduce((pre: any, current: any) => {
            if (!hash[current[key]]) {
                hash[current[key]] = pre.push(current);
            }
            return pre;
        }, []);
    }
    return Array.from(new Set(array));
}

/**
 * 数组求和
 * @param arr: 其中值只能是整数, 小数, 数字字符串
 */
export function arraySum(arr: (string | number)[]) {
    return arr.reduce(
        (acc: number | string, val: number | string) =>
            parseFloat(acc.toString()) + parseFloat(val.toString()),
        0,
    );
}

/**
 * 过滤数组中(空/0)的值
 * @param arr
 */
export function filterNullValue(arr: any[]) {
    return arr.filter(Boolean);
}

/**
 * 取数组的交集
 * @param arr1
 * @param arr2
 */
export function arrayIntersection(arr1: any[], arr2: any[]) {
    return arrayRemoveRepeat(arr1).filter((v: any) => arr2.includes(v));
}
